package com.lanou3g.code0418.wait;

/**
 * Created by dllo on 18/4/18.
 */

/*
*
* wait（） 和sleep（）区别：
*
* 共同点：都会让线程停止
*   区别：1.wait（）是object类的方法，任何对象都有，而sleep是Thread类的方法
*        2.wait必须写在synchronized代码中，并且必须是锁对象调用，而sleep没有限制
*        3.wait 会释放锁对象（锁打开），而sleep不会释放锁
*        4.wait可以被别的线程唤醒，而sleep需要等待时间结束
*
*
* */
public class Main {
    public static void main(String[] args) {
        final Object lock = new Object();

        Thread a = new Thread(){
            @Override
            public void run() {

                System.out.println("a线程开始了");
                synchronized (lock){
                    try {
                        lock.wait();  // wait 和 notifiy是成对出现的 在其他线程用notify唤醒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("a线程结束了");
            }
        };
        a.start();
        try {
            Thread.sleep(3000); //让主线程等3秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("准备唤醒a线程");

        synchronized (lock){
            lock.notify(); //notifyAll()将所对象下挂载的锁对象全部唤醒
        }



    }






}
